Various types of resources can be stored on servers. Client devices communicate with the servers to access such resources. For example, a server can store word processor documents. In this example, a client device can retrieve word processor documents from the server and store documents back to the server.
A server may become unreachable to a client device. When the server is unreachable by the client device, the client device does not receive messages from the server. A server may become unreachable by the client device for a variety of reasons. For example, a server may become unreachable by the client device when the server fails, when a network connection fails, when the client device becomes disconnected from a network, or when other events occur.
An application operating on a client device can use a protocol stack to communicate with a server. When the server is reachable by the client device, the protocol stack provides data to the application in response to requests by the application. When a server becomes unreachable by the client device, the protocol stack does not receive responses from the server. Hence, when the protocol stack does not receive a response from the server within a given timeout period, the protocol stack provides an error to the application. In some instances, the application is not responsive to user input while the application is waiting for responses from the protocol stack. Consequently, when the server becomes unreachable, the user may be forced to wait for the given timeout period before the application again becomes responsive to user input.
In some circumstances, the application uses multiple protocol stacks to communicate with the server. Furthermore, the application can be unresponsive to user input when waiting for responses from each of these multiple protocol stacks. Consequently, the user may be forced to wait for the expiration of the timeout periods for each of the multiple protocol stacks when the server becomes unreachable to the client device. Being forced to wait in this manner can be annoying to the user and decrease productivity. The application can be unresponsive during this time, thereby preventing the user from interacting with the application or using the application to do work.